// SiliconFlow API 配置
const API_CONFIG = {
  baseURL: 'https://api.siliconflow.cn/v1',
  model: 'Qwen/Qwen2.5-7B-Instruct',
  apiKey: import.meta.env.VITE_AI_API_KEY,
}

// 当前使用的 API 配置
const CURRENT_API = API_CONFIG

// 系统提示词 - 定义 AI 助手的角色
const SYSTEM_PROMPT = `你是一个专业的AI旅行助手，名字叫"旅行小助手"。你的职责是：

1. 为用户提供个性化的旅行建议和行程规划
2. 推荐热门景点、美食、住宿等旅游资源
3. 帮助用户制定旅行预算和省钱攻略
4. 回答各类旅行相关的问题
5. 态度友好、专业，回答简洁清晰

回答时请注意：
- 使用友好的语气，可以适当使用emoji增加亲和力
- 提供具体、实用的建议
- 如果涉及具体行程，尽量包含时间安排、地点、预算等信息
- 对于不确定的信息，诚实告知用户
- 优先推荐性价比高、安全可靠的选项`

/**
 * 调用 AI 聊天接口
 * @param {Array} messages - 聊天历史消息列表
 * @param {Object} options - 可选配置
 * @returns {Promise<string>} AI 回复内容
 */
export async function sendChatMessage(messages, options = {}) {
  try {
    // 检查 API Key 是否配置
    if (!CURRENT_API.apiKey || CURRENT_API.apiKey.includes('your-api-key')) {
      throw new Error('请先配置 API Key！\n\n')
    }

    // 构建请求消息
    const requestMessages = [
      {
        role: 'system',
        content: SYSTEM_PROMPT
      },
      ...messages.map(msg => ({
        role: msg.type === 'user' ? 'user' : 'assistant',
        content: msg.content
      }))
    ]

    // 发送请求
    const response = await fetch(`${CURRENT_API.baseURL}/chat/completions`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${CURRENT_API.apiKey}`
      },
      body: JSON.stringify({
        model: CURRENT_API.model,
        messages: requestMessages,
        temperature: options.temperature || 0.7,
        max_tokens: options.maxTokens || 2000,
        stream: false
      })
    })

    // 处理响应
    if (!response.ok) {
      const errorData = await response.json().catch(() => ({}))
      console.error('API Error:', errorData)

      if (response.status === 401) {
        throw new Error('API Key 无效，请检查配置')
      } else if (response.status === 402) {
        throw new Error('账户余额不足！\n\n解决方案：\n1. 前往 API 提供商平台充值\n2. 或切换到其他免费 API（点击设置按钮）\n\n推荐免费替代方案：\n• SiliconFlow (每日免费额度)\n• 重新注册 DeepSeek 账号获取新额度')
      } else if (response.status === 429) {
        throw new Error('请求频率过高，请稍后再试')
      } else {
        throw new Error(errorData.error?.message || `请求失败 (${response.status})`)
      }
    }

    const data = await response.json()

    // 提取 AI 回复
    const aiReply = data.choices?.[0]?.message?.content

    if (!aiReply) {
      throw new Error('API 返回数据格式错误')
    }

    return aiReply

  } catch (error) {
    console.error('Chat API Error:', error)
    throw error
  }
}

/**
 * 流式调用 AI 聊天接口
 * @param {Array} messages - 聊天历史消息列表
 * @param {Function} onChunk - 接收数据块的回调函数
 * @param {Object} options - 可选配置
 */
export async function sendChatMessageStream(messages, onChunk, options = {}) {
  try {
    // 检查 API Key 是否配置
    if (!CURRENT_API.apiKey || CURRENT_API.apiKey.includes('your-api-key')) {
      throw new Error('请先配置 API Key！')
    }

    // 构建请求消息
    const requestMessages = [
      {
        role: 'system',
        content: SYSTEM_PROMPT
      },
      ...messages.map(msg => ({
        role: msg.type === 'user' ? 'user' : 'assistant',
        content: msg.content
      }))
    ]

    // 发送流式请求
    const response = await fetch(`${CURRENT_API.baseURL}/chat/completions`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${CURRENT_API.apiKey}`
      },
      body: JSON.stringify({
        model: CURRENT_API.model,
        messages: requestMessages,
        temperature: options.temperature || 0.7,
        max_tokens: options.maxTokens || 2000,
        stream: true
      })
    })

    if (!response.ok) {
      const errorData = await response.json().catch(() => ({}))
      throw new Error(errorData.error?.message || `请求失败 (${response.status})`)
    }

    // 读取流式响应
    const reader = response.body.getReader()
    const decoder = new TextDecoder()
    let buffer = ''

    console.log('开始接收流式响应...')

    while (true) {
      const { done, value } = await reader.read()

      if (done) {
        console.log('流式响应接收完成')
        break
      }

      buffer += decoder.decode(value, { stream: true })
      const lines = buffer.split('\n')
      buffer = lines.pop() || ''

      for (const line of lines) {
        const trimmedLine = line.trim()
        if (!trimmedLine || trimmedLine === 'data: [DONE]') continue

        if (trimmedLine.startsWith('data: ')) {
          try {
            const jsonStr = trimmedLine.slice(6)
            console.log('接收到数据:', jsonStr.substring(0, 100) + '...') // 只打印前100个字符

            const jsonData = JSON.parse(jsonStr)
            const content = jsonData.choices?.[0]?.delta?.content

            if (content) {
              console.log('提取到内容:', content)
              onChunk(content)
            } else {
              console.log('未找到 content，完整数据:', jsonData)
            }
          } catch (e) {
            console.error('解析错误:', e)
            console.error('原始数据:', trimmedLine)
          }
        }
      }
    }

  } catch (error) {
    console.error('Stream Chat API Error:', error)
    throw error
  }
}

